/* CsJni - .NET / Java Bridge
 * 
 * Copyright 2010 Robert E. Burke Licensed under the Apache License, Version 
 * 2.0 (the "License"); you may not use this file except in compliance with 
 * the License. You may obtain a copy of the License at 
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable 
 * law or agreed to in writing, software distributed under the License is 
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 * KIND, either express or implied. See the License for the specific language 
 * governing permissions and limitations under the License. 
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace CsJni.PlatformAbstraction
{
    internal enum ExpandPathType
    {
        Executable,
        Other
    }

    // TODO - 32/64 bit issues - clarify
    // 64-bit Windows issue - see http://blog.manueladam.com/index.php/archives/165
    // Although the target platform property is unavailable with Visual C# Express Edition, msdn offer a solution, http://msdn.microsoft.com/vstudio/express/support/issues.  
    // I solved the issue, opened the .csproj file, located the first <PropertyGroup> section, and added <PlatformTarget>x86</PlatformTarget>. 
    // ACTUALLY, on 64-bit platforms, need to use 64-bit JVM.

    internal interface IPlatform
    {
        string PlatformName { get; }
        string GetCreatedJavaVMsMethodName { get; }
        string CreateJavaVMMethodName { get; }
        void FaultVfPrintf();
        string ExtractVfprintf(IntPtr filePointer, IntPtr format, IntPtr arguments);
        IntPtr LoadDynamicLibrary(string fileName);
        void FreeDynamicLibrary(IntPtr libraryHandle);
        T GetDelegateForLibraryMethod<T>(IntPtr libraryHandle, string methodName);
        string FindJvmLibraryWithPath(string path);
        string LookupJvmLibrary(string version);
        string ExpandPath(string inputPath, ExpandPathType expandPathType);
        void Release();
        string NormalizePathDirectorySeparators(string inputPath);
    }
}
